********************************************************************
*																	*
* 				Antwortlatenzen 2013								*
*																	*
*********************************************************************

* Projekt: PVS-Artikel Aktivierung

set more off

*--------------------------------------------------------------
* Bereinigung Rohzeiten und Umrechnung in Sekunden
*-------------------------------------------------------------

* Identifikation ung�ltiger Werte: Interviewervalidierung
tab pre003_t if pre003_rl==-99 //was bedeutet es, wenn Missing bei
								//Antwortzeit? Vielleicht Interviewer
								//vergessen, Taste zu dr�cken o.�.
tab pre003_rl
gen rohwbt = pre003_rl							
replace rohwbt=. if pre003_t==2 | pre003_rl==-99		
sum rohwbt pre003_rl			//�ber 1600 F�lle gehen verloren

gen rohwabs = pre005_rl
replace rohwabs=. if pre005_t==2 | pre005_rl==-99 | pre005_rl==-97
sum rohwabs pre005_rl
//tab rohwabs pre007b , m //f�r Briefw�hler keine Latenzmessung

gen rohpid = pre123_rl
replace rohpid=. if pre123_t==2 | pre123_rl==-99		
sum pre123_rl rohpid

gen rohlire = pre018_rl
replace rohlire = . if pre018_t==2 | pre123_rl==-99
sum pre018_rl rohlire

tab1 rohwbt rohwabs rohpid rohlire

* Zeiten = 0 l�schen
* Solch eien Antwortgeschwindigkeit (unter 75ms) ist 
* unplausibel
foreach var of varlist roh* {
replace `var' = . if `var'==0
}

* Zeiten in Sekunden umrechnen
foreach var of varlist roh* {
replace `var' = `var'/1000
}

* Bereinigung: Ausrei�er 3 Standardabweichungen
//Ausschluss 3 Standardabweichungen �ber und unter Mean
//Wir gehen ja davon aus, dass Antwortzeiten k�rzer werden, je
//n�her Wahltag, deswegen d�rfen Mittelwerte nicht �ber gesamten
//Zeitraum berechnet werden, sondern tagesweise oder wochenweise.
//Entspreched m�ssen dann jene Personen  ausgeschlossen werden, 
//die 3 Standardabweichungen �ber und unter dem Tages- oder 
//Wochenmittelwert liegen.
//erstmal: nach Kalenderwoche (pre_woche), danach tagesweise
//pro Woche etwa 600-800 Befragte

* 1.Schritt: F�r jede Variable 2 Dummys erstellen,
* die angeben, ob eine Antwortzeit �ber oder unter 3 Standard-
* abweichungen vom Mittelwert liegt
* Strategie: sum-Befehl speichert Mittelwert und Standardabweichung
* in r-Beh�lter, auf die durch r(mean) oder r(sd) zugegriffen 
* werden kann. Zwei Schleifen: einmal f�r die Variablen und einmal
* f�r die Zeit.

* Wochenweise
foreach var of varlist rohwbt rohwabs rohpid rohlire {
	foreach week of numlist 28/38 {
		sum `var' if pre_woche==`week'
		gen over`var'`week' = `var'>(r(mean)+3*r(sd)) ///
			 & pre_woche==`week'
		replace over`var'`week' = . if pre_woche==`week' ///
			& `var'==.
		gen under`var'`week' = `var'<(r(mean)-3*r(sd)) ///
			& pre_woche==`week'
		replace under`var'`week' = . if pre_woche==`week' ///
			& `var'==.
	}
}


* Tagesweise
foreach var of varlist rohwbt rohwabs rohpid rohlire {
	forvalues day=1/76 {
		sum `var' if pre_tag==`day'
		gen over`var'd`day' = `var'>(r(mean)+3*r(sd)) ///
			 & pre_tag==`day'
		replace over`var'd`day' = . if pre_tag==`day' ///
			& `var'==.
		gen under`var'd`day' = `var'<(r(mean)-3*r(sd)) ///
			& pre_tag==`day'
		replace under`var'd`day' = . if pre_tag==`day' ///
			& `var'==.
	}
}


*Nachpr�fen
sum rohwbt if pre_woche==28
display r(mean)+3*r(sd)  //alle Werte gr��er als 5970 Milisekunden
						//(also 6 Sekunden) sollen raus.
						//erscheint bei Telefoninterview ganz 
						//plausibel, dass man nicht l�nger nachdenkt
						
list rohwbt overrohwbt28 underrohwbt28 if pre_woche==28
						
sum rohwbt if pre_tag==72
display r(mean)+3*r(sd)
						
list rohwbt overrohwbt28 if overrohwbt28==1  & pre_woche==28 //stimmt

sum under*
//empirisch kommen einfach keine Werte von 3 Standardabweichungen 
//unterhalb des Means vor, schiefe Verteilung



* Ausrei�er 2 Standardabweichungen
* evtl. sind 3 Standardabweichungen zu viel des Guten,
* Standardvorgehen: 2 Stadardabweichungen 
* Wochenweise
foreach var of varlist rohwbt rohwabs rohpid rohlire {
	foreach week of numlist 28/38 {
		sum `var' if pre_woche==`week'
		gen over2sd`var'`week' = `var'>(r(mean)+2*r(sd)) ///
			 & pre_woche==`week'
		replace over2sd`var'`week' = . if pre_woche==`week' ///
			& `var'==.
		gen under2sd`var'`week' = `var'<(r(mean)-2*r(sd)) ///
			& pre_woche==`week'
		replace under2sd`var'`week' = . if pre_woche==`week' ///
			& `var'==.
	}
}



* Tagesweise
foreach var of varlist rohwbt rohwabs rohpid rohlire {
	forvalues day=1/76 {
		sum `var' if pre_tag==`day'
		gen over2sd`var'd`day' = `var'>(r(mean)+2*r(sd)) ///
			 & pre_tag==`day'
		replace over2sd`var'd`day' = . if pre_tag==`day' ///
			& `var'==.
		gen under2sd`var'd`day' = `var'<(r(mean)-2*r(sd)) ///
			& pre_tag==`day'
		replace under2sd`var'd`day' = . if pre_tag==`day' ///
			& `var'==.
	}
}


*Nachpr�fen
sum rohwbt if pre_woche==28
display r(mean)+2*r(sd)  //alle Werte gr��er als 5970 Milisekunden
						//(also 6 Sekunden) sollen raus.
						//erscheint bei Telefoninterview ganz 
						//plausibel, dass man nicht l�nger nachdenkt
						
list rohwbt overrohwbt28 underrohwbt28 if pre_woche==28
						


sum under*   //wird niemals unterschritten


* 2. Schritt: diejenigen Antwortzeiten rauswerfen, die Schwelle �ber-
* oder unterschreiten. Neue Variable bilden, damit sp�ter Zeiten ohne
* Ausrei�er und mit Ausrei�ern verglichen werden kann.

gen rohwbt_out = rohwbt			//damit Schleifen unten laufen, schon mal erstellen
gen rohwabs_out = rohwabs
gen rohpid_out = rohpid
gen rohlire_out = rohlire

gen rohwbt_2sdout = rohwbt			//damit Schleifen unten laufen, schon mal erstellen
gen rohwabs_2sdout = rohwabs		//2 Standardabweichungen
gen rohpid_2sdout = rohpid
gen rohlire_2sdout = rohlire

lab var rohwbt_out "Zeit Wahlbeteiligungsabsicht ohne Ausrei�er von wochenweisen Mittelwerten"
lab var rohwabs_out "Zeit Wahlabsicht ohne Ausrei�er von wochenweisen Mittelwerten"
lab var rohpid_out "Zeit PID ohne Ausrei�er von wochenweisen Mittelwerten"
lab var rohlire_out "Zeit Links-Rechts-Selbsteinstufung ohne Ausrei�er von wochenweisen Mittelwerten"

gen rohwbt_dout = rohwbt			//damit Schleifen unten laufen, schon mal erstellen
gen rohwabs_dout = rohwabs
gen rohpid_dout = rohpid
gen rohlire_dout = rohlire

gen rohwbt_2sddout = rohwbt			//damit Schleifen unten laufen, schon mal erstellen
gen rohwabs_2sddout = rohwabs		//mit 2 Standardabweichungen als Kriterium f�r Ausrei�er
gen rohpid_2sddout = rohpid
gen rohlire_2sddout = rohlire

lab var rohwbt_dout "Zeit Wahlbeteiligungsabsicht ohne Ausrei�er von tagesweisen Mittelwerten"
lab var rohwabs_dout "Zeit Wahlabsicht ohne Ausrei�er von tagesweisen Mittelwerten"
lab var rohpid_dout "Zeit PID ohne Ausrei�er von tagesweisen Mittelwerten"
lab var rohlire_dout "Zeit Links-Rechts-Selbsteinstufung ohne Ausrei�er von tagesweisen Mittelwerten"

* Wochenweise

* 3 Standardabweichungen
foreach var of varlist rohwbt rohwabs rohpid rohlire {
	foreach week of numlist 28/38 {
		replace `var'_out = . if over`var'`week'==1 ///
			& pre_woche==`week'
		replace `var'_out = . if under`var'`week'==1 ///
			& pre_woche==`week'
}
}

* 2 Standardabweichungen
foreach var of varlist rohwbt rohwabs rohpid rohlire {
	foreach week of numlist 28/38 {
		replace `var'_2sdout = . if over2sd`var'`week'==1 ///
			& pre_woche==`week'
		replace `var'_2sdout = . if under2sd`var'`week'==1 ///
			& pre_woche==`week'
}
}

* Tagesweise: 3 Standardabweichungen
foreach var of varlist rohwbt rohwabs rohpid rohlire {
	forvalues day=1/76 {
		replace `var'_dout = . if over`var'd`day'==1 ///
			& pre_tag==`day'
		replace `var'_dout = . if under`var'd`day'==1 ///
			& pre_tag==`day'
}
}

* Tagesweise: 2 Standardabweichungen
foreach var of varlist rohwbt rohwabs rohpid rohlire {
	forvalues day=1/76 {
		replace `var'_2sddout = . if over2sd`var'd`day'==1 ///
			& pre_tag==`day'
		replace `var'_2sddout = . if under2sd`var'd`day'==1 ///
			& pre_tag==`day'
}
}





sum *_out    //Fallzahlen scheinen immer noch okay zu sein
sum *_2sdout


*------------------------------------------------------------------
*	Basisgeschwindigkeiten �ber sozialstrukturelle Merkmale 					
*---------------------------------------------------------------------

sum *_rl //Das sind alle Antwortzeitmessungen

tab1 pre101 		//Geburtsjahr (sehr gut!)
tab pre103			//Schulbildung (sehr gut!)
tab pre122			//Gewerkschaftsmitglied (sehr gut!)

gen zeit1 = pre101_rl
replace zeit1 = . if pre101_t==2 | pre101_rl==-99 //Interviewervalidierung
replace zeit1 = . if pre101_rl==0

gen zeit2 = pre103_rl
replace zeit2 = . if pre103_t==2 | pre103_rl==-99
replace zeit2 = . if pre103_rl==0

gen zeit3 = pre122_rl
replace zeit3 = . if pre122_t==2 | pre122_rl==-99 
replace zeit3 = . if pre122_rl==0

sum zeit*     //durchschnittlich 2 Sekunden und damit deutlich
				//schneller als Zeiten von Pid & Co
				
foreach var of varlist zeit? {
replace `var' = `var'/1000
}

*Ausrei�er ausschlie�en
corr zeit1 pre_woche
corr zeit2 pre_woche
corr zeit3 pre_woche

forvalues num=1/3 {
gen zeit`num'_3sd = zeit`num'
gen zeit`num'_3sdd = zeit`num'
gen zeit`num'_2sd = zeit`num'
gen zeit`num'_2sdd = zeit`num'
}


forvalues week=28/38 {
foreach var of varlist zeit1-zeit3 {
sum `var' if pre_woche==`week'
replace `var'_3sd = . if `var'>(r(mean)+3*r(sd)) ///
	& pre_woche==`week'
replace `var'_3sd = . if `var'<(r(mean)-3*r(sd)) ///
	& pre_woche==`week'
replace `var'_2sd = . if `var'>(r(mean)+2*r(sd)) ///
	& pre_woche==`week'
replace `var'_2sd = . if `var'<(r(mean)-2*r(sd)) ///
	& pre_woche==`week'
}
}

forvalues day==1/76 {
foreach var of varlist zeit1-zeit3 {
sum `var' if pre_tag==`day'
replace `var'_2sdd = . if `var'>(r(mean)+2*r(sd)) ///
	& pre_tag==`day'
replace `var'_2sdd = . if `var'<(r(mean)-2*r(sd)) ///
	& pre_tag==`day'
replace `var'_3sdd = . if `var'>(r(mean)+3*r(sd)) ///
	& pre_tag==`day'
replace `var'_3sdd = . if `var'<(r(mean)-3*r(sd)) ///
	& pre_tag==`day'	
}
}


fsum zeit* pre101_rl pre103_rl pre122_rl

* Basisgeschwindigkeit �ber Mittelwert berechnen
egen basis_2sd = rowmean(zeit*2sd)
egen basis_3sd = rowmean(zeit*3sd)
egen basis_2sdd = rowmean(zeit*2sdd)
egen basis_3sdd = rowmean(zeit*3sdd)

cor basis_2sd pre_woche
sum basis*
	
* Wovon h�ngt Basisgeschwindigkeit ab?
reg basis_2sd pre_woche alter polint pidstr educlow educhigh ///
	weiblich i.interviewer
reg basis_3sd pre_woche alter polint weiblich i.interviewer 
reg basis_2sdd pre_tag alter polint pidstr educlow educhigh ///
	weiblich i.interviewer

	
*-------------------------------------------------------------------
*	Residuenlatenzindex 							
*------------------------------------------------------------------

* Tages- und wochenweise
* 2 und 3 Standardabweichungen

* Wochenweise
reg rohwbt_out basis_3sd [pw=w_ipf1w]
predict latenz_wbt_3sdout, residuals

reg rohwbt_2sdout basis_2sd [pw=w_ipf1w]
predict latenz_wbt_2sdout, residuals

reg rohwabs_out basis_3sd [pw=w_ipf1w]
predict latenz_wabs_3sdout, residuals

reg rohwabs_2sdout basis_2sd [pw=w_ipf1w]
predict latenz_wabs_2sdout, residuals

reg rohpid_out basis_3sd [pw=w_ipf1w]
predict latenz_pid_3sdout, residuals

reg rohpid_2sdout basis_2sd [pw=w_ipf1w]
predict latenz_pid_2sdout, residuals

reg rohlire_out basis_3sd [pw=w_ipf1w]
predict latenz_lire_3sdout, residuals

reg rohlire_2sdout basis_2sd [pw=w_ipf1w]
predict latenz_lire_2sdout, residuals


* Tagesweise
reg rohwbt_dout basis_3sdd [pw=w_ipf1w]
predict latenz_wbt_3sddout, residuals
 
reg rohwabs_dout basis_3sdd [pw=w_ipf1w]
predict latenz_wabs_3sddout, residuals

reg rohpid_dout basis_3sdd [pw=w_ipf1w]
predict latenz_pid_3sddout, residuals

reg rohlire_dout basis_3sdd [pw=w_ipf1w]
predict latenz_lire_3sddout, residuals

reg rohwbt_dout basis_2sdd [pw=w_ipf1w]
predict latenz_wbt_2sddout, residuals

reg rohwabs_dout basis_2sdd [pw=w_ipf1w]
predict latenz_wabs_2sddout, residuals

reg rohpid_dout basis_2sdd [pw=w_ipf1w]
predict latenz_pid_2sddout, residuals

reg rohlire_dout basis_2sdd [pw=w_ipf1w]
predict latenz_lire_2sddout, residuals


drop over* under*

				
*------------------------------------------------------
* Latenzen zu Politikerbewertungen
*------------------------------------------------------

fre pre031a_t				//Angela Merkel
gen rohmerkel = pre031a_rl
replace rohmerkel = . if pre031a_t==2 | ///
	pre031a_rl==-99 | pre031a_rl==0
replace rohmerkel = rohmerkel/1000
sum rohmerkel pre031a_rl

fre pre031b_rl
gen rohstein = pre031b_rl
replace rohstein = . if pre031b_t==2 | ///
	pre031b_rl==-99 | pre031b_rl==0
replace rohstein = rohstein/1000
sum rohstein pre031b_rl


* Ausrei�er ausschhlie�en
gen rohmerkel2sdout = rohmerkel
gen rohmerkelout = rohmerkel

gen rohstein2sdout = rohstein
gen rohsteinout = rohstein

forvalues week=28/38 {
foreach var of varlist rohmerkel rohstein {
sum `var' if pre_woche==`week'
replace `var'2sdout = . if `var'>r(mean)+2*r(sd) ///
	& pre_woche==`week'
replace `var'2sdout = . if `var'<r(mean)-2*r(sd) ///
	& pre_woche==`week'
}
}

forvalues week=28/38 {
foreach var of varlist rohmerkel rohstein {
sum `var' if pre_woche==`week'
replace `var'out = . if `var'>r(mean)+3*r(sd) ///
	& pre_woche==`week'
replace `var'out = . if `var'<r(mean)-3*r(sd) ///
	& pre_woche==`week'
}
}


gen rohmerkel2sddout = rohmerkel
gen rohmerkeldout = rohmerkel
gen rohstein2sddout = rohstein
gen rohsteindout = rohstein

forvalues day=1/76 {
foreach var of varlist rohmerkel rohstein {
sum `var' if pre_tag==`day'
replace `var'2sddout = . if `var'>r(mean)+2*r(sd) ///
	& pre_tag==`day'
replace `var'2sddout = . if `var'<r(mean)-2*r(sd) ///
	& pre_tag==`day'
}
}

forvalues day=1/76 {
foreach var of varlist rohmerkel rohstein {
sum `var' if pre_tag==`day'
replace `var'dout = . if `var'>r(mean)+3*r(sd) ///
	& pre_tag==`day'
replace `var'dout = . if `var'<r(mean)-3*r(sd) ///
	& pre_tag==`day'
}
}

fsum roh*2sddout roh*2sdout

* Residualindex

* 2 Standardabweichungen
reg rohmerkel2sdout basis_2sd [pweight=w_ipf1w]
predict latenz_merkel_2sdout, residuals

reg rohstein2sdout basis_2sd [pweight=w_ipf1w]
predict latenz_stein_2sdout, residuals

reg rohmerkel2sddout basis_2sdd [pweight=w_ipf1w]
predict latenz_merkel_2sddout, residuals

reg rohstein2sddout basis_2sdd [pweight=w_ipf1w]
predict latenz_stein_2sddout, residuals

* 3 Standardabweichungen
reg rohmerkelout basis_3sd [pweight=w_ipf1w]
predict latenz_merkel_3sdout, residuals

reg rohsteinout basis_3sd [pweight=w_ipf1w]
predict latenz_stein_3sdout, residuals

reg rohmerkeldout basis_3sdd [pweight=w_ipf1w]
predict latenz_merkel_3sdddout, residuals

reg rohsteindout basis_3sdd [pweight=w_ipf1w]
predict latenz_stein_3sddout, residuals


*--------------------------------------------------------
* Datensatz speichern
*--------------------------------------------------------

	
foreach var of varlist w_ipf1w week-latenz_stein_3sddout {
rename `var' `var'13
}

gen lfdn13 = lfdn

keep year lfdn13 w_ipf1w13 week13-latenz_stein_3sddout13
save "2013\2013.dta", replace











